package com.example.uit_management;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class Activity_list_registry extends Activity {
	///////////
	static int TongTC_registry=0;
	static TextView textView_TongTC_registry ;
	// bien cho dialog
	/////////////////////
	static Dialog dialog;
	static Activity activity;
	/**Biến kiểu listView */
	static ListView listV;
	static ArrayAdapterDialogRegistry Adapter_dialog;
	/**Biến kiểu ArrayList<HashMap<String, String>> luu mang mon thuc hanh*/
	static ArrayList<HashMap<String, String>> ArrayMap_dialog = new ArrayList<HashMap<String, String>>(); 

	
	// bien cho chon menu loc theo khoa
	////////////////////////////////////
	static String Faculty_name="All";
	
	//////////////////////////////////
	
	/**Mã sinh viên */
	static final String Student_ID =MainActivity.Student_ID; 
	/**Pass word */
	static final String Student_ID_pass =MainActivity.Student_ID_pass; 
	
	// Variable of class
	
	/**Biến kiểu listView */
	private ListView list;
	/**Biến kiểu ArrayAdapterRegistry */
	static  ArrayAdapterRegistry adapter;
	/**Biến kiểu JsonParser_course lấy các môn học trong học kì này*/
	private JsonParser_course JSON = new JsonParser_course();		
	/**Biến kiểu ArrayList<HashMap<String, String>> lấy từng môn học có trong học kì này */
	private ArrayList<HashMap<String, String>> ArrayMap = new ArrayList<HashMap<String, String>>(); 
	/**Biến kiểu HashMap<String, String> */
	private HashMap<String, String> Map = new HashMap<String, String>();
	/**Biến kiểu ArrayList<HashMap<String, String>> đánh dấu khoa*/
	private ArrayList<HashMap<String, String>> ArrayMap_listener = new ArrayList<HashMap<String, String>>(); 
	/**Biến kiểu HashMap<String, String> danh dấu khoa*/
	private HashMap<String, String> Map_listener = new HashMap<String, String>();
	/**Mảng int.kiem tra check mon thu hanh*/
	static int [] array_int_check;
	// Các biến information
	private static final int NEW_MENU_ITEM = Menu.FIRST;
	private static final int IP_Menu = NEW_MENU_ITEM;
	private static int Size=0 ;
	
	
	@Override
    public void onCreate(Bundle savedInstanceState) {		
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_registry);
        // xóa dialog        
        Menu_Activity.dialog.dismiss();
        activity = this;
        ////////////////////////////
        //Show custom  listview
        //////////////////////////////
        // ArrayMap lấy các môn học có trong học kỳ này
        ArrayMap = JSON.getMap();
        // Khoi tao bien check list
        array_int_check = new int[ArrayMap.size()+1];
        //--Set cho TexView hoc ki        
        TextView Semester = (TextView) findViewById(R.id.textView_HocKy_registry);
        textView_TongTC_registry = (TextView)findViewById(R.id.textView_TongTC_registry);
        HashMap<String, String> Map_semester = new HashMap<String, String>();
        Map_semester = ArrayMap.get(0);
        Semester.setText("Học kỳ" + Map_semester.get(JsonParser_course.KEY_semesterIndex)+"-Năm :"+Map_semester.get(JsonParser_course.KEY_semesterYear));
        
        // Lấy ID của list view
        list=(ListView)findViewById(R.id.list_registry); 
        // call constructor method of adapter
        adapter =new ArrayAdapterRegistry(this, ArrayMap);
        // Nếu không có môn nào đk thì thông báo
        if(ArrayMap.size()==0){
        	Toast.makeText(this, "Không có môn nào", Toast.LENGTH_LONG).show();
        }
        /*for(int i=0; i<ArrayMap.size();i++){
        	Log.e(Activity_list_registry.class.toString(),ArrayMap.get(i).get(JSON.KEY_subjectName));
        }*/
        list.setAdapter(adapter);
        // Click event for single list row
        list.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				

			}
		});		       
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
       
    	 MenuInflater inflater = getMenuInflater();
    	    inflater.inflate(R.menu.activity_list_registry, menu);    
    	    try {
    	    	// Create a Submenu of oder menu
    	    	 //Log.e(Activity_list_registry.class.toString(), "first add sub menu");
        	    SubMenu sub = menu.findItem(R.id.order_list).getSubMenu();
        	    sub.clear();        		

        	    // Create a viable get Json form server
        	    //Log.e(Activity_list_registry.class.toString(), "Get data json sub add menu");
        	    JsonParser_Faculty Js_faculty = new JsonParser_Faculty();        	   
        	    ArrayMap = Js_faculty.getMap_Faculty();        	   
        	    // Get size of Array HashMap   	
        	    Size = ArrayMap.size();
        	    for(int i = 0; i < ArrayMap.size();i++){  
        	    		Map = ArrayMap.get(i);        	    		       	    		
        	    		//Log.e(Activity_list_registry.class.toString(), "add sub add menu" );
        	    	    sub.add(i+1,IP_Menu+i+1,i+1,Map.get(JsonParser_Faculty.KEY_facultyID)+"_"+Map.get(JsonParser_Faculty.KEY_facultyName));    	    	   
        	    }
        	    sub.add(0,IP_Menu,0,"All");
			} catch (Exception e) {
				// TODO: handle exception
				Log.e(Activity_list_registry.class.toString(), "Exception sub add menu");
			}
    	    
    	    return super.onCreateOptionsMenu(menu);
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.save_list:     //Toast.makeText(this, "You pressed the icon!", Toast.LENGTH_LONG).show();
            {
            	Save_Menu();
            	break;  
            }                               
             
            // Nhấn nút Back thì se quay lai Activity Menu
            case R.id.back_list: startActivity(new Intent(getApplicationContext(),Menu_GridView.class));
                                break;
        }
        ///////////////////////////////
        // Listenter oder menu     
        // Nhấn nút chọn hiện thị theo khoa
        for(int i=0; i<Size; i++){         	
        	
        	// Choose all item menu
        	if(item.getItemId() == IP_Menu)        	{        		
        		//Log.e(Activity_list_registry.class.toString(), "Listen ID faculty all");
        		ArrayMap_listener = JSON.getMap();
            	if(ArrayMap_listener.size()==0){
                	Toast.makeText(this, "Không có môn nào", Toast.LENGTH_LONG).show();
                }            	
                 // Get Id of list
                 list=(ListView)findViewById(R.id.list_registry);
                 // call constructor method of adapter
                 adapter =new ArrayAdapterRegistry(this, ArrayMap_listener);
                 // add adapter into list
                 list.setAdapter(adapter);
                 break;
        	}else
        	// choose other item menu
        	if(item.getItemId() == IP_Menu+1+i){
        	Map_listener = ArrayMap.get(i);
        	//Log.e(Activity_list_registry.class.toString(), "Listen ID faculty"+hashMap.get(JsonParser_Faculty.KEY_facultyID));
        	ArrayMap_listener = JSON.getMapKey(Map_listener.get(JsonParser_Faculty.KEY_facultyID));
        	if(ArrayMap_listener.size()==0){
            	Toast.makeText(this, "Không có môn nào", Toast.LENGTH_LONG).show();
            } 
        	// Get Id of list
             list=(ListView)findViewById(R.id.list_registry);
             // call constructor method of adapter
             adapter =new ArrayAdapterRegistry(this, ArrayMap_listener);
             // add adapter into list
             list.setAdapter(adapter);     
             break;
        	}
        }
        return true;
    }
    //////////////////////
    // SAve method
    ////////////////////////
    /**Gửi dữ liệu lên seve khi nhấn nút save */
    public void Save_Menu(){
    	// hiên dialog thông báo cho người dùng
    	 AlertDialog.Builder myAlertDialog = new AlertDialog.Builder(Activity_list_registry.this);
    	 myAlertDialog.setTitle("THÔNG BÁO");
    	 myAlertDialog.setMessage("BẠN MUỐN ĐĂNG KÍ ?");
    	 // lắng nghe cho nút ok trong dialog
    	 myAlertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {

    	  public void onClick(DialogInterface arg0, int arg1) {
    	  // do something when the OK button is clicked    		
			// Data luu trữ dữ liệu đi
    		String data =""; 
  			Log.e(Activity_list_registry.class.toString(),  "Tổng số list :"+list.getCount());
    		// Vòng lập lận lần lượt hết list view (Đăng kí môn học)
	  		try{	
	  			for(int i=0; i<list.getCount(); i++){  
	  				adapter.getItemAtIndex(i);
	    			//Log.e(Activity_list_registry.class.toString(),"Môn học :"+adapter.getItemAtIndex(i) );
	    			
	  				// Nếu Check box được check(tức là có đăng kí) thì ta lưu môn đó vào biến data để gửi lên sever
	    			if(adapter.GetCheckAtIndex(i).equals("1")){
	    				// Chưa có dữ liêu gửi (Data== "")
	              	  if(data.equals("")){
	                    	data+=adapter.getItemAtIndex(i).toString().split("_")[0];
	                  }else // Data đã có it nhât một môn đăng kí
	                    	data+=","+adapter.getItemAtIndex(i).split("_")[0];
	                    //Log.e(Activity_list_registry.class.toString(), "Try Activity_list_registry finish add :"+tv.getText().toString().split("_")[0]);
	                 }      			
	    		}	  		
	  		}catch(Exception e){
                e.printStackTrace();
            	Log.e(Activity_list_registry.class.toString(), "Exception Activity_list_registry method save");
               }
	  		//////////////////////////////////////////
	  		// Kiểm tra môn trùng
	  		
	  		// mảng lưu trử môn trùng
	  		String[] Array_Check_before_send = new String[data.split(",").length];
  			Log.e(Activity_list_registry.class.toString(),  " Array_Check_before_send.length :"+ Array_Check_before_send.length);
  			// tạo mảng luu trữ mà môn học
  			for (int i = 0; i < Array_Check_before_send.length; i++){
  				Array_Check_before_send[i]=	data.split(",")[i];
  				//Log.e(Activity_list_registry.class.toString(),  " Array_Check_before_send[i] : "+ Array_Check_before_send[i]);
  			} 		

	  		for (int i = 0; i < Array_Check_before_send.length; i++) {
	  			for (int j = i+1; j < Array_Check_before_send.length; j++){
	  				// Xet trường hơp đăng kí nhiều lớp ly thuyet cho cung mot mon hoc
		  			if(Array_Check_before_send[i].split("\\.")[0].equals(Array_Check_before_send[j].split("\\.")[0]) && Array_Check_before_send[i].split("\\.").length == 2 &&  Array_Check_before_send[j].split("\\.").length ==2){
	  	            	Log.e(Activity_list_registry.class.toString(), "Send Data trùng môn lí thuyết");
	  	            	 AlertDialog.Builder AlertDialog = new AlertDialog.Builder(Activity_list_registry.this);
		  	          	 AlertDialog.setTitle("LỖI");
		  	          	 AlertDialog.setMessage("Không được đăng kí nhiều lớp cho một môn lý thuyết :" +Array_Check_before_send[i].split("\\.")[0]);
		  	           // lắng nghe cho nút ok trong dialog
		  	          	 AlertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
							
							@Override
							public void onClick(DialogInterface dialog, int which) {
								// TODO Auto-generated method stub
								
							}
						});
		  	          	 AlertDialog.show();
		  	          	 return;
	  				}
	  				
		  			/////////////////////////////////////////////////////////////////////
	  				// Xét trường hợp lỗi khi đăng kí nhiều lớp thực hành
	  				
		  			if(Array_Check_before_send[i].split("\\.")[0].equals(Array_Check_before_send[j].split("\\.")[0]) && Array_Check_before_send[i].split("\\.").length == 3 &&  Array_Check_before_send[j].split("\\.").length == 3){
	  					Log.e(Activity_list_registry.class.toString(), "Send Data trùng môn thực hành");
	  	            	 AlertDialog.Builder AlertDialog = new AlertDialog.Builder(Activity_list_registry.this);
		  	          	 AlertDialog.setTitle("LỖI");
		  	          	 AlertDialog.setMessage("Không được đăng kí nhiều lớp thực hành cho một môn lý thuyết :" +Array_Check_before_send[i].split("\\.")[0]);
		  	           // lắng nghe cho nút ok trong dialog
		  	          	 AlertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
							
							@Override
							public void onClick(DialogInterface dialog, int which) {
								// TODO Auto-generated method stub
								
							}
						});
		  	          	 AlertDialog.show();
		  	          	 return;
	  				}  			
	  			
	  			}
	  			
			}
	  		/////////////////////////////////////////////////////////////
	  		// Tao vong lap de xet dieu kien ko cho dang ki mon thuc hanh khi chua dang ki mon li thuyet.
	  		////////////////////////////////////////////////
	  		for (int i = 0; i < Array_Check_before_send.length; i++) {
				int flag =0;
	  			for (int j = 0; j < Array_Check_before_send.length; j++) {
					// Truong hợp đắng kí mon thực hanh ma chưa dang ki mon li thuyet
	  				if(Array_Check_before_send[i].split("\\.").length == 2){
	  					flag =1;
	  					break;
	  				}else if(Array_Check_before_send[i].split("\\.")[0].equals(Array_Check_before_send[j].split("\\.")[0]) && Array_Check_before_send[i].split("\\.").length == 3 &&  Array_Check_before_send[j].split("\\.").length == 2){
	  					Log.e(Activity_list_registry.class.toString(), "Send Data trùng môn thực hành j :"+j +"aaa :"+ (Array_Check_before_send[i].split("\\.")[0].equals(Array_Check_before_send[j].split("\\.")[0]) && Array_Check_before_send[i].split("\\.").length == 3 &&  Array_Check_before_send[j].split("\\.").length == 2));
	  					flag =1;
	  					break;
	  				}			
				}
				if(flag !=1 && !data.equals("")){
  	            	 AlertDialog.Builder AlertDialog = new AlertDialog.Builder(Activity_list_registry.this);
	  	          	 AlertDialog.setTitle("LỖI");
	  	          	 AlertDialog.setMessage("Không được đăng kí lớp thực hành khi chưa đăng kí lớp lý thuyết môn:" +Array_Check_before_send[i].split("\\.")[0]);
	  	           // lắng nghe cho nút ok trong dialog
	  	          	 AlertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
						
						@Override
						public void onClick(DialogInterface dialog, int which) {
							// TODO Auto-generated method stub
							
						}
					});
	  	          	 AlertDialog.show();
	  	          	 return;		  				
  			}	  				
			}
	  		///////////////////////////////////////
	  		// Kiem tra neu ko co data thi thong bao la huy het cac mon hoc
	    	 if(data.equals("")){
	    		 AlertDialog.Builder AlertDialog = new AlertDialog.Builder(Activity_list_registry.this);
 	          	 AlertDialog.setTitle("THÔNG BÁO");
 	          	 AlertDialog.setMessage("BAN KHÔNG CHỌN MÔN NÀO");
 	           // lắng nghe cho nút ok trong dialog
 	          	 AlertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
					
					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						
					}
				});
 	          	 AlertDialog.show();
	    	 }
	  		
	  		///////////////////////////////////////
  			// Send data len server
  			Log.e(Activity_list_registry.class.toString(),  "Data send len server :"+ data);
  			Log.e(Activity_list_registry.class.toString(),  "--------------------------");
  			Log.e(Activity_list_registry.class.toString(),  "Ma Sinh vien"+ Student_ID);

  			// kiem tra co dang ki sever dc ko
  			String result = JSON.PutDataRegCourse(data, Student_ID, "add");
  			if(result.equals("")){
  				AlertDialog.Builder AlertDialog = new AlertDialog.Builder(Activity_list_registry.this);
 	          	 AlertDialog.setTitle("THÔNG BÁO");
 	          	 AlertDialog.setMessage("ĐĂNG KÍ THÀNH CÔNG");
 	           // lắng nghe cho nút ok trong dialog
 	          	 AlertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
					
					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						
					}
				});
	          	 AlertDialog.show();
 	          	 return;		  				
  			}else{
  				AlertDialog.Builder AlertDialog = new AlertDialog.Builder(Activity_list_registry.this);
	          	 AlertDialog.setTitle("THÔNG BÁO");
	          	 AlertDialog.setMessage("ĐĂNG KÍ THẤT BẠI");
	           // lắng nghe cho nút ok trong dialog
	          	 AlertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
					
					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						
					}
				});
	          	 AlertDialog.show();
	          	 return;	
  			}  				
    	  }});
    
    	 
    	 myAlertDialog.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
    	       
    	  public void onClick(DialogInterface arg0, int arg1) {
    	  // do something when the Cancel button is clicked
    	  }});
    	 myAlertDialog.show();
    }
    /** lam nhiem vu sho dialog chon mon thuc hanh, data la du lieu trong listView, HashMap la mon dang dc check,positon la vi hien tai o listView */ 
    static void Check_Practice_Dialog(Activity a,int position, HashMap<String, String> Hashmap, ArrayList<HashMap<String,String>> data){
	    Log.e(Activity_list_registry.class.toString(),  "Vao dialog");
    	// xoa du lieu truoc(De khong Add them)
	    ArrayMap_dialog.clear();		
		// add cac mon vao trong mang ArrayMap_dialog
	    int index=0;
	    for (int i = 0; i < data.size(); i++) {
			if(i!=position)		
				// tim mon thuc hanh cua mon ly thuyet dang check
				// La on ly thuyet , set la mon thuc hanh , phai bang nhau
			if(data.get(position).get(JsonParser_course.KEY_courseID).split("\\.").length==2&& (data.get(i).get(JsonParser_course.KEY_courseID).split("\\.")).length==3&&(data.get(position).get(JsonParser_course.KEY_courseID).split("\\.")[0]).equals((data.get(i).get(JsonParser_course.KEY_courseID)).split("\\.")[0])){
					ArrayMap_dialog.add(data.get(i));
					array_int_check[index++]=i;
				}
		}
	    array_int_check[index] = -1;
	    // kiem tra mang xem co du lieu hay khong
	    // neu co thi show dialog
		if(ArrayMap_dialog.size()<=0 ){
			return ;
		}
		//-- thiet lap dia log
		Log.e(Activity_list_registry.class.toString(),  "Showwwwwww");
		dialog = new Dialog(a);
		dialog.setContentView(R.layout.activity_dialog_list_registry);
		dialog.setTitle("This is my custom dialog box");
        dialog.setCancelable(true);
        listV = (ListView)dialog.findViewById(R.id.list_registry_RadioButon);
        Adapter_dialog =new ArrayAdapterDialogRegistry(activity,ArrayMap_dialog);
        listV.setAdapter(Adapter_dialog);         
        dialog.show();
        //----//       
	}
}

